Cette partie est la partie principale de notre programme. Nous définissons 2 classes pour nos arêtes et nos sommets qui sont respectivement Edge et Vertex. L'objet Vertex est composé de l'identifiant du sommet, sa position dans les listes de l'objet graphe et la liste de ses arêtes incidentes.\\

L'objet Edge est composé des deux sommets adjacents, son poids, sa position est les positions des deux sommets adjacents.\\

La classe main récupère les strings liés aux deux sommets et les place dans le graphe\footnote{vide lorsqu'il vient d'être créé} si ceux-ci n'existent pas encore. Ensuite nous plaçons les arêtes liées aux sommets dans le graphe. \\

Ensuite nous utilisons l'algorithme de Kruskal. Cet algorithme consiste à trier les arêtes en ordre de poids croissant. Ensuite, on parcoure la liste ainsi triée en ajoutant chaque arête sur laquelle on passe dans un second graphe\footnote{qui a les mêmes nœuds que le premier, aucune arête et deviendra l'arbre sous-tendant de poids minimum recherché} à condition que :
\begin{itemize}
	\item elle ne forme pas de cycle
	\item une arête ayant les mêmes nœuds extrêmes n'a pas déjà été ajoutée\footnote{toujours vrai s'il s'agit d'un graphe simple}
	\item elle n'est pas une boucle\footnote{toujours vrai pour les graphes simples}\\
\end{itemize}

Cet algorithme est en $O(m \log m)=O(m \log n)$ avec $n$ le nombre de nœuds et $m$ le nombre d'arêtes.